home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / musik / jukebox / shuffle.jb < prev    next >
Text File  |  1995-03-09  |  2KB  |  92 lines

  1. /* shuffle play replacement */
  2. /* (c) copyright 1992,93 by F.J. Reichert */
  3.  
  4. options results;
  5. options failat 11;
  6.  
  7. /* let's find out how much we have */
  8. trks = numtrks();
  9.  
  10. if trks = 0 then do;
  11.     say 'no tracks found, maybe there''s no disc at all...';
  12.     exit(5);
  13. end;    
  14.  
  15. current label;
  16. say 'disc "'||result||'" has' trks 'tracks'
  17. say 'press [ESC] to stop'
  18.  
  19. do forever;
  20.  
  21.     /* start playing so we'll hear something */
  22.     play;
  23.     if rc ~= 0 then leave;
  24.  
  25.     /* find out where we are */
  26.     current track;
  27.     newtrack = result;
  28.  
  29.     /* and how long this track will play */
  30.     current trktime;
  31.     stop = result;
  32.  
  33.     /* that will give us an idea where we are on the whole disc */
  34.     current time;
  35.     start = result;
  36.  
  37.     /* ... and how long we already played this track */
  38.     current reltime;
  39.     played = result;
  40.  
  41.     /* so we'll figure out where this track starts. Easy, isn't it? */
  42.     subtime start played
  43.     start = result;
  44.  
  45.     /* and calculate where to end */
  46.     addtime start stop;
  47.     stop = result;
  48.     /* some frames less, or we might never reach it */
  49.     subtime stop "00:00:10";
  50.     stop = result;
  51.     
  52.     /* tell it to the user */
  53.     current title;
  54.     say 'now playing track #'||overlay(newtrack,' ',1,2) 'from' start 'up to' stop '"'||result||'"'
  55.  
  56.     /* ...and wait until we're finished */
  57.     wait time stop;
  58.  
  59.     /* ESC will stop us */
  60.     current break;
  61.     if result ~= 0 then leave;
  62.  
  63.     /* this track finished. we need to find a new one */
  64.     oldtrack = newtrack;
  65.  
  66.     /* please, don't give us the track we've already heard! */
  67.     do while newtrack = oldtrack;
  68.         newtrack = random(1,trks);
  69.     end;
  70.  
  71.     /* and tell the drive where to go on */
  72.     set track newtrack;
  73.     
  74.     /* give lazy drives a chance to figure out where
  75.         they are, one third of a second (25/75) will suffice */
  76.     wait absolute "00:00:25"
  77. end;
  78. say 'shuffle play ending';
  79. exit(0);
  80.  
  81. /* Tell us how many tracks there are on this disc */
  82. numtrks:
  83.     options results;
  84.     toc stem names.;
  85.     if rc = 0 then do
  86.         return(names.0 - 1);
  87.     end;
  88.     else do;
  89.         return(0);
  90.     end;    
  91. end;
  92.